home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / DB_CLIPP / 0669.ZIP / DB3NOTES.TXT < prev    next >
Text File  |  1985-11-30  |  38KB  |  876 lines

  1.                         dBASE III Printer Check
  2.             (PC Magazine Vol 4 No 7 April 2, 1985 PC Tutor)
  3.  
  4.      To determine, from within dBASE III, whether the printer is online
  5. before the SET PRINT ON command is issued, you can create a small
  6. PRNCHECK.COM program that will check the printer status and return an
  7. error level of 1 if an error occurs, 0 if not.  Use DEBUG to create
  8. PRNCHECK.COM.
  9.      The program calls the printer interrupt, thus requesting printer
  10. status.  It then checks for an error signal, which occurs either if
  11. bits 5 or 3 are high (1) or if bit 4 is low (0).  The program sets the
  12. ERRORLEVEL 1 flag if the printer is off-line or not connected.  To
  13. implement PRNCHECK.COM, put it in a batch program:
  14.  
  15. A>COPY CON:PRNTEST.BAT
  16. PRNCHECK
  17. IF ERRORLEVEL 1 GOTO SETERR
  18. ECHO STORE 'N' TO PRNANS >PRNSET.PRG
  19. GOTO END
  20. :SETERR
  21. ECHO STORE 'Y' TO PRNANS >PRNSET.PRG
  22. :END
  23.  
  24.      The batch program calls PRNCHECK.  If no printer error was
  25. generated, it makes a file named PRNSET.PRG, containing the line STORE
  26. 'N' TO PRNANS.  If there was a printer error, the file contains the
  27. line STORE 'Y' TO PRNANS instead.  Finally, your sequence of dBASE III
  28. commands is:
  29.  
  30. RUN PRNTEST
  31. DO PRNSET
  32.  
  33. This will run PRNTEST (setting up the file PRNSET.PRG to look like a
  34. dBASE command), then DO the command, so setting up a variable named
  35. PRNANS with value 'N' if there was no printer error, or 'Y' is a
  36. printer error occurred.  Your dBASE program can then check the value
  37. of PRNANS and do whatever you like.  Create PRNCHECK.COM with DEBUG
  38. as follows:
  39.  
  40. A>DEBUG PRNCHECK.COM
  41. file not found
  42. -A100
  43. xxxx:0100  MOV   DX,0000
  44. xxxx:0103  MOV   AH,02
  45. xxxx:0105  INT   17
  46. xxxx:0107  TEST  AH,28
  47. xxxx:010A  JNZ   0118
  48. xxxx:010C  MOV   AL,10
  49. xxxx:010E  AND   AH,AL
  50. xxxx:0110  CMP   AH,AL
  51. xxxx:0112  JNE   0118
  52. xxxx:0114  MOV   AL,00
  53. xxxx:0116  JMP   011A
  54. xxxx:0118  MOV   AL,01
  55. xxxx:011A  MOV   AH,4C
  56. xxxx:011C  INT   21
  57. xxxx:011E  <enter>
  58. -
  59. -RCX
  60. CX 0000
  61. :20
  62. -W
  63. Writing 20 bytes
  64. -Q
  65.  
  66. -----------------------------------------------------------------
  67.                          dBASE III to Symphony
  68.                   (PC World Star-Dot-Star July 1984)
  69.  
  70.      Many people making the transition from dBASE II and 1-2-3 to dBASE
  71. III and Symphony have probably run into the same problem I did:
  72. Converting data from dBASE III to Symphony is not nearly as easy as
  73. converting from dBASE II to 1-2-3.
  74.      My solution is as follows.  First, run dBASE III and USE or SELECT
  75. a data file, then use the command COPY FILE filename.DBF TO
  76. filename.EXE DELIMITED to create a fily Symphony can read.  Quit dBASE
  77. III and start Symphony.  From the Services menu (<F9>) select File
  78. Import Structured, and then enter the name of the file created in prior
  79. step.  All fields in the dBASE III file will be imported.  I save time
  80. by using dBASE III to eliminate the fields I will not need before
  81. importing the file with Symphony.  To do this, either modify the
  82. structure of the data base file before copying it or copy only the
  83. selected fields.
  84.  
  85. -----------------------------------------------------------------
  86.                           dBASE III Lines Up
  87.                   (PC World Star-Dot-Star July 1985)
  88.  
  89.      The dBASE III routines CENTER.PRG and RIGHT.PRG will center or
  90. right-justify a line of text sent to the printer or the screen.  The
  91. first line of each routine establishes the parameters to be passed when
  92. the program is called.  The next line sets the width of the output
  93. device, and the two lines after that preserve the cursor position when
  94. the routine is called.  The last line restores the cursor to its
  95. previous location. To use these routines type DO CENTER WITH row,string
  96. or DO RIGHT WITH row,string, where row is set to the desired line and
  97. string is the text to center or right-justify.
  98.  
  99. * CENTER.PRG
  100. PARAMETERS ROW,STRING
  101. WIDTH=80
  102. R=ROW()
  103. C=COL()
  104. @ ROW,0 + (WIDTH - (LEN(STRING)))/2 SAY STRING
  105. @ R,C, SAY ''
  106.  
  107. * RIGHT.PRG
  108. PARAMETERS ROW,STRING
  109. WIDTH=80
  110. R=ROW()
  111. C=COL()
  112. @ ROW,0 + (WIDTH - (LEN(STRING))) SAY STRING
  113. @ R,C SAY ''
  114.  
  115. -----------------------------------------------------------------
  116.                             dBASE III Timer
  117.                   (PC World Star-Dot-Star July 1985)
  118.  
  119.      dBASE III has several functions and field types not available in
  120. dBASE II.  The TIME() function can be used to set up a timer, as shown
  121. in TIMER.PRG.  This small program can be run from within dBASE III.
  122. Type START = TIME() <Enter> to begin timing; type END = TIME() <Enter>
  123. to indicate the end of the interval to be measured.  The command DO
  124. TIMER will execute the program, which will clear the screen and display
  125. the date and the elapsed time in "Saturday: March 16, 1985" format.  By
  126. issuing the DO TIMER command at various points, START can be stated
  127. once and END stated several times to time several different aspects of
  128. a program.
  129.  
  130. * TIMER.PRG.  Assumes calling program executes START = TIME()
  131. * and END = TIME() prior to DO TIMER.
  132.  
  133. SET TALK OFF
  134. STORE .T. TO GONOGO
  135. DO WHILE GONOGO
  136. HOUR1 = VAL(START)
  137. HOUR2 = VAL(END)
  138. MIN1 = VAL(SUBSTR(START,4,2))
  139. MIN2 = VAL(SUBSTR(END,4,2))
  140. SEC1 = VAL(SUBSTR(START,7,2))
  141. SEC2 = VAL(SUBSTR(END,2,2))
  142. ELAPHR = HOUR2 - HOUR1
  143. IF MIN2 > MIN1
  144.   ELAPMIN = MIN2 - MIN1
  145. ELSE
  146.   ELAPMIN = 60 - MIN1 + MIN2
  147.   ELAPHR = ELAPHR - 1
  148. ENDIF
  149. IF SEC2 > SEC1
  150.   ELAPSEC = SEC2 - SEC1
  151. ELSE
  152.   ELAPSEC = 60 - SEC1 + SEC2
  153.   ELAPMIN = ELAPMIN -1
  154. ENDIF
  155. ELAPSE=STR(ELAPHR,2)+":"+STR(ELA;MIN,2)+":"+STR(ELAPSEC,2)
  156. DDAY = CDOW(DATE()) + ":  "
  157. DDATE=CMONTH(DATE())+STR(DAY(DATE()),3)+","+STR(YEAR(DATE()),5)
  158. HDR = DDAY + DDATE
  159. CLEAR
  160. @ 3,10 SAY HDR
  161. @ 5,10 SAY "Elapsed time was "
  162. @ 5,28 SAY ELAPSE
  163. STORE .F. TO GONOGO
  164. ENDDO
  165.  
  166. -----------------------------------------------------------------
  167.                      dBASE III Function Keys
  168.              (PC World September 1985 Star-Dot-Star)
  169.  
  170.      dBASE III has a SET FUNCTION command for defining the characters
  171. sent by functions keys F2 through F10.  (Changing the value of F1 is
  172. not allowed.)  You can use this facility to install menu selections
  173. via functions keys as demonstrated by the program DKEYS.  The first
  174. section of the program sets the values of function keys F2 through F7
  175. to letters A through F, representing the six functions represented by
  176. the menu.  The value of F8 is set to Z so that the program can recognize
  177. the F8 key and indicate an error if it is pressed.  F9 and F10 are set
  178. to QUIT and EXIT, respectively.  After setting the function key values,
  179. the program displays the menu and waits for a keystroke.  A CASE
  180. statement executes the selected function, then returns control to the
  181. menu.
  182.  
  183. DKEYS:
  184.  
  185. SET FUNCTION 2 TO 'A'
  186. SET FUNCTION 3 TO 'B'
  187. SET FUNCTION 4 TO 'C'
  188. SET FUNCTION 5 TO 'D'
  189. SET FUNCTION 6 TO 'E'
  190. SET FUNCTION 7 TO 'F'
  191. SET FUNCTION 8 TO 'Z'
  192. SET FUNCTION 9 TO 'Q'
  193. SET FUNCTION 10 TO 'X'
  194. SET TALK OFF
  195. SET BELL OFF
  196. STORE .t. TO cust_menu
  197. CLEAR
  198. DO WHILE cust_menu
  199.   STORE ' ' TO func_sel
  200.   @ 1,34 SAY "Customer Menu"
  201.   @ 2,37 SAY DATE()
  202.   @ 5,24 SAY 'F2    Open a New Customer Account'
  203.   @ 7,24 SAY 'F3    Modify a Customer Account'
  204.   @ 9,24 SAY 'F4    Display Customer Accounts'
  205.   @ 11,24 SAY 'F5    Delete a Customer Account'
  206.   @ 13,24 SAY 'F6    Print an Account Summary Report'
  207.   @ 15,24 SAY 'F7    Print a Detailed Account Report'
  208.   @ 17,24 SAY 'F9    Display Prior Menu'
  209.   @ 19,24 SAY 'F10   Exit to DOS'
  210.   @ 23,24 SAY 'Select Desired Option:'
  211.   @ 23,48 SAY func_set
  212.   @ 23,48 GET func_set
  213.   READ
  214.   DO CASE
  215.     CASE func_sel = 'A'
  216.       DO newacc
  217.     CASE func_sel = 'B'
  218.       DO modacc
  219.     CASE func_sel = 'C'
  220.       DO dspacc
  221.     CASE func_sel = 'D'
  222.       DO delacc
  223.     CASE func_sel = 'E'
  224.       DO accsum
  225.     CASE func_sel = 'F'
  226.       DO accdet
  227.     CASE func_sel = 'X'
  228.       STORE .f. to cust_menu
  229.       LOOP
  230.     CASE func_sel = 'Q'
  231.       QUIT
  232.       ELSE
  233.       @ 0,0 SAY CHR$(7)
  234.     ENDCASE
  235.     CLEAR
  236. ENDDO cust_menu
  237.  
  238. -----------------------------------------------------------------
  239.                     Calculating Square Roots
  240.         (PC Magazine Vol 4 No 23 Nov 12, 1985 Power User)
  241.  
  242.      The following is an old Pascal routine for calculating square
  243. roots converted into dBASE.  Simply STORE the number you would like
  244. to a memory variable "number" and execute the procedure with DO SQRT.
  245. The result will be returned in the variable "sqrt."  This result will
  246. be accurate to at least eight decimal places, perhaps more, depending
  247. on the precision of the initial number.
  248.      Editor's Note:  Converting Pascal routines into dBASE sounds like
  249. an avenue with all sorts of possible applications.  There are thousands
  250. of Pascal routines to solve many of the problems dBASE programmers
  251. face, making this one to avoid rediscovering the wheel.  The syntax
  252. of each of the two languages is similar enough to make Pascal an
  253. attractive source of ideas for .PRG files.  Expect a lot of debugging
  254. though.  The program below is modified slightly to add both an INPUT
  255. line at the top and a "?" line at the end.  These lines make the
  256. program usable as a standalone method for obtaining square roots.
  257. To use the routine within a more complex application, you can drop
  258. these lines if the preceding code creates a memory variable called
  259. "number".
  260.  
  261. * SQRT.PRG -- finds square roots [dBASE III]
  262. * ENTER WITH number = NUMBER
  263. * RETURNS WITH sqr = SQUARE ROOT
  264.  
  265. SET HEADING OFF
  266. SET SAFETY OFF
  267. SET TALK OFF
  268. INPUT "NUMBER? " TO NUMBER
  269. STORE NUMBER * 1.00000000 TO LQnum
  270. STORE (1 + LQnum) / 2 TO LQs
  271. STORE LQnum * .00000001 TO LQtest
  272. STORE .N. TO LQdone
  273. DO WHILE .NOT. LQdone
  274.   STORE LQs * LQs - LQnum TO lqHOLD
  275.   IF LQhold < 0
  276.     STORE 0 - LQhold TO LQhold
  277.   ENDIF
  278.   IF LQhold < LQtest
  279.     STORE .Y. TO LQdone
  280.     LOOP
  281.   ENDIF
  282.   STORE (LQs + (LQnum / LQs)) / 2 TO LQs
  283. ENDDO
  284. STORE LQs TO SQR
  285. ? "ANSWER: "
  286. ?? SQR
  287. RELEASE ALL LIKE LQ*
  288. SET TALK ON
  289. RETURN
  290.  
  291. -----------------------------------------------------------------
  292.                  Stripping WordStar's High Bits
  293.         (PC Magazine Vol 4 No 26 Dec 24, 1985 Power User)
  294.  
  295.      WordStar users with dBASE II have an easy way to strip the high
  296. bits the word processor tacks on to the end of each word in a document.
  297. Simply boot up dBASE II and load the WordStar file into dBASE's own
  298. editor by typing MODIFY COMMAND [filename.ext].  Since dBASE's editor
  299. assumes a .PRG extension, you must be sure to add your document's
  300. extension or a period after the filename if there is no extension.
  301. Then simply resave the file by hitting Ctrl-W.  The resulting new file
  302. will be pure ASCII.  This has workd with documents up to 30K bytes in
  303. size.  dBASE will not strip out printer formatting commands, which you
  304. must take out separately.
  305.      With dBASE III the process is a bit more complicated.  First of
  306. all, dBASE III will truncate documents larger than about 4K bytes.
  307. Longer documents must be broken into 4K-byte segments, converted into
  308. ASCII, then reassembled using WordStar's nondocument mode.  Also,
  309. unlike dBASE II, dBASE III won't strip out the high bits unless you
  310. actually change the file in some way while in MODIFY COMMAND.  One way
  311. to get around this is to insert a blank line at the top of the file
  312. using Ctrl-N, delete it again with Ctrl-Y, then save the file with
  313. Ctrl-W.  This converts the actual text into ASCII.  However, there's
  314. still one more step left.
  315.      dBASE II's MODIFY COMMAND automatically converts WordStar's "soft"
  316. carriage returns into regular (hard) ones, but dBASE III will not.  To
  317. convert the carriage returns, open the document in WordStar's
  318. nondocument mode.  At the top of the file, type Ctrl-QA (search and
  319. replace).  At the "FIND?" prompt, hold down the Alt key and type 141
  320. on the numeric keypad, then release the Alt key and hit Enter.  At the
  321. "REPLACE WITH?" prompt, type Ctrl-P and press the Enter key twice.  At
  322. the "OPTIONS?" prompt, type NG and hit Enter.  This will put a hard
  323. carriage return at the end of each line.
  324.      Editor's Note:  This tip is handy for converting WordStar files
  325. into something legible under DOS's TYPE command and can save you the
  326. cost of a conversion utility if you already own and use both programs.
  327. Some dBASE uers may be surprised to find that the program's editor can
  328. be used with files other than the default .PRG ones.  This permits you
  329. to modify .FMT, .FRM and .MEM files, as well as any other ASCII files
  330. you wish from within dBASE.
  331.  
  332. -----------------------------------------------------------------
  333.                     Concurrent Data Base Management
  334.               (IBM PC Update Dec 1984 by J. D. Carrabis)
  335.  
  336.      Ashton-Tate makes much ado about dBASE III's knack for
  337. simultaneous data bases...up to 10 active data bases.  But you will
  338. usually get an error message (TOO MANY FILES OPEN) on about the third
  339. data base reference when using a computer with less that 512k of
  340. memory.
  341.      There is no problem running dBASE III on an XT.  You copy all the
  342. files on the disks in the dBASE package to the hard disk, then place
  343. the dBASE factory SYSTEM disk in the floppy drive when you want to use
  344. dBASE.
  345.      If, however, you are using a floppy drive system, you may hit some
  346. snags.  You need two disks to boot the system.  One disk should have a
  347. copy of DOS, the DBASE.EXE file, and the two configuration files
  348. (CONFIG.DB and CONFIG.SYS).  More importantly, the disk that has these
  349. three files must be the SYSTEM disk that came with your dBASE package.
  350. This is easily done.
  351.      You first copy all the other files (ASSIST.HLP, DBASE.OVL,
  352. HELP.DBS) from your SYSTEM disk to a blank formatted disk.  Erase those
  353. same files from the dBASE SYSTEM disk.  Use the DOS SYS command to
  354. place the DOS system on the dBASE SYSTEM disk.  Now you have a bootable
  355. copy of dBASE III.
  356.      Of course, when you boot up dBASE III, it asks you for the disk
  357. containing the overlay files -- that is the disk with the remaining
  358. dBASE files on it (the disk with ASSIST.HLP, DBASE.OVL, HELP.DBS).
  359. Take out the SYSTEM disk and place the new disk in.  Now you can use
  360. dBASE III.
  361.      But if you want to use the dBASE III RUN command, you have to
  362. place another file on your disk, the DOS COMMAND.COM file.  You must
  363. copy this file to the new disk as well.  In case you haven't used it
  364. yet, RUN is the dBASE III command that allows you to call programs
  365. external to dBASE.  An example would be running WordStar from inside
  366. dBASE.
  367.      What does this have to do with not being able to access more than
  368. two data bases simultaneously?  You have to edit the CONFIG. SYS file
  369. so that it reads:
  370.  
  371. FILES=20
  372. BUFFERS=24
  373.  
  374.      But even this doesn't usually work.  The solution?  Get more
  375. memory.  What happens then?
  376.      Every time a file is opened, dBASE III loses some room.  You may
  377. notice the line FILES=20 in the CONFIG.SYS file.  This line tells dBASE
  378. that is has a maximum of 20 files it can work with at a given time.
  379. Those 20 files get eaten quickly.
  380.      You start with DOS -- one file.  Next is DBASE.EXE -- two.  You
  381. also need DBASE.OVL -- three files.  Adding HELP.DBS makes four.  Add a
  382. few data bases and their index files; a dBASE program file or two,
  383. each with a subroutine; a format file; a new data base created from the
  384. old ones; etc. and 20 files are gone.
  385.      I did have fun with the CONFIG.DB file.  This file allows you to
  386. customize the features of dBASE III.  I also use a special AUTOEXEC.BAT
  387. file to facilitate the use of my computer, and a special CONFIG.DB file
  388. to facilitate the use of dBASE.
  389.      Figures 1 and 2 show two separate files to boot up automatically
  390. with dBASE.  The first is AUTOEXEC.BAT, and the second is CONFIG.DB.
  391. Figure 3 is an enhanced CONFIG.DB file that I use.
  392.      The first line of the AUTOEXEC.BAT tells DOS to change from the
  393. starting directory to the dBASE directory.  By first creating a dBASE
  394. directory, then accessing it, the drives are clean for possible future
  395. uses.  Next I tell the computer to use a greater than symbol (>) when
  396. it gives me a system prompt.  This is done with $G.  I also have it
  397. tell me what directory (or path) I'm in with $P.  Then I tell the
  398. computer immediately to stop whatever it's doing when I press Ctrl-
  399. Break.  This is a nice feature and one that is toggled off in most
  400. cases.  I like to bring things to a crashing halt on occasion.
  401.      The next 7 lines are simply REMarks that I want printed on the
  402. screen.  Remember that dBASE III wants to see its own SYSTEM disk when
  403. it begins working.  These 7 REMarks increase the probability that it
  404. will get its SYSTEM disk.
  405.      The PAUSE command is just that.  It stops execution until a key is
  406. pressed.  The last line in the AUTOEXEC.BAT file is the command to
  407. start using dBASE itself.  When the time comes that you want to use
  408. something other than dBASE, you can make required changes to the
  409. AUTOEXEC.BAT file.  As an example, let's say you set up your disk with
  410. directories for WordStar, Lotus, dBASE, BASIC and BASICA, DOS, LISP,
  411. FORTH, R:Base, Macros and Assemblers, P FORTRAN, and COBOL, as I have.
  412.      I normally don't want to go between these areas.  The work I do in
  413. one area is meant to stay in that area so the CHDIR\ command is
  414. adequate to get me where I want to be.  There are times, however, that
  415. I don't want to leave my DOS directory but do want to get files from
  416. other directories.  My own AUTOEXEC.BAT file has:
  417.  
  418. PATH\DOS;\WS;\123;\DB;\BASICS;\L;\F1;\RB;\MACASS;\P;\F2;\C1
  419.  
  420. in place of the CHDIR/DBASE command.  The above PATH command tells DOS
  421. to look through all my directories to find what I'm looking for.
  422. Needless to say, I also don't have the REMark or PAUSE commands.
  423. I have something else in their place.
  424.      Now for the CONFIG.DB file.  Normally, I work with an XT, and most
  425. of my programs and data bases are located on it, so I set the default
  426. drive to C.  I find the BELL annoying in the extreme, so I shut it
  427. off.  Nor do I like to know everything dBASE does as it does it.  I
  428. shut that off with TALK.  I turn off the HEADINGS and SAFETY because I
  429. design my programs with their own headings and backup procedures.  I
  430. find the DELIMITER distracting so that becomes historical.  I do want
  431. to have the last chance at changing things, so I want to CONFIRM my
  432. answers.  The ALTERNATE = C:DEBUG creates a separate dBASE DEBUG file
  433. that you can review to find out how far you got and what happened
  434. before you bombed out of a program.
  435.      My own CONFIG.DB file is in Figure 3.  Note that I've included a
  436. PATH for dBASE to search if I forget to tell it where something is.  I
  437. also want to be able to escape from what I'm doing when I panic.  I
  438. like things personal, hence the PROMPT.  PW.COM is PERFECT WRITER, a
  439. word processing program that I like enough to use for editing my dBASE
  440. program files and memo fields.
  441.      There are quite a few other modifications or adjustments you can
  442. make with the AUTOEXEC.BAT, CONFIG.SYS and CONFIG.DB files.  The best
  443. way to get some use out of these files is to experiment.
  444.  
  445. Figure 1:  AUTOEXEC.BAT
  446.  
  447. CHDIR\DBASE
  448. PROMPT $P$G
  449. BREAK ON
  450. REM
  451. REM ************************************************************
  452. REM *                                                          *
  453. REM *         PLACE THE DBASE SYSTEM DISK IN DRIVE A           *
  454. REM *                                                          *
  455. REM ************************************************************
  456. REM
  457. PAUSE
  458. DBASE
  459.  
  460. - - - - - - - - - -
  461. Figure 2:  CONFIG.DB
  462.  
  463. DEFAULT = C:
  464. BELL = OFF
  465. TALK = OFF
  466. HEADINGS = OFF
  467. SAFETY = OFF
  468. DELIMITER = OFF
  469. CONFIRM = ON
  470. ALTERNATE = C:DEBUG
  471. EXACT = ON
  472.  
  473. - - - - - - - - - -
  474. Figure 3: A personalized CONFIG.DB file
  475.  
  476. DEFAULT = C:
  477. PATH = C:\DB;\WS;\RB;\DOS
  478. BELL = OFF
  479. TALK = OFF
  480. HEADINGS = OFF
  481. SAFETY = OFF
  482. DELIMITER = OFF
  483. CONFIRM = ON
  484. ESCAPE = ON
  485. PROMPT = What now, chum?
  486. TEDIT = PW.COM
  487. WP = PW.COM
  488.  
  489. -----------------------------------------------------------------
  490.                       dBASE III on the RUN
  491.               (PC World October 1985 Star-Dot-Star)
  492.  
  493.      The dBASE III RUN command can be used to execute programs and DOS
  494. commands.  For example, the command RUN CD\ will make the root directory
  495. the current directory.  The command RUN DIR will display the names of
  496. the files in the current directory.  Even more powerful is the RUN
  497. command's ability to execute other files, including batch files.  Thus,
  498. the command RUN ABC will execute the batch file ABC.BAT, which can
  499. contain a list of commands to be executed in sequence.
  500.  
  501. -----------------------------------------------------------------
  502.                     Converting Symphony Files
  503.         (PC Magazine Vol 4 No 23 Nov 12, 1985 Power User)
  504.  
  505.      Converting a Symphony file for use with dBASE III entails more
  506. than either Lotus's or Ashton-Tate's documentation would lead you to
  507. believe.  The problems stem from the differences between dBASE II and
  508. dBASE III.
  509.      Lotus provides a function, Translate, to go from either Symphony
  510. or 123 to dBASE II.  Presumably, one should be able to use the dCONVERT
  511. utility to convert the dBASE II file upward to dBASE III.  Not so.
  512. Therefore, after converting a Lotus file via the Translate facility,
  513. enter dBASE II (assuming you have dBASE II), USE the file, then QUIT.
  514. This resaves the file, adding whatever was missing to make it a proper
  515. .DBF file.  dCONVERT will now be able to successfully convert the file
  516. upward to dBASE III.
  517.      The Lotus Translate facility is supposed to allow you to convert
  518. either a complete worksheet or a subset range within the worksheet to
  519. a .DBF file.  Unfortunately, in the original release version of the
  520. Translate facility, the range conversion option contains some bugs
  521. that prevent it from working properly.  You must first do a File
  522. Extract of your spreadsheet for the desired range, then use Translate's
  523. worksheet option to convert the Extract.
  524.      Prior to converting a Lotus database, all numeric record fields
  525. must be individually formatted, via the Cell Format option, to the
  526. number of decimal places required.  The Global Format option within
  527. Symphony is not sufficient for decimal place designations.  If you've
  528. used the Global Format option to set decimal length, Translate will
  529. truncate all decimals into a whole number.  The solution is to format
  530. all database cells to their required decimal length prior to attempting
  531. any conversion into a .DBF file.
  532.      Numeric Lotus files that contain a label prefix will not convert
  533. properly into .DBF files.  In order to check each database cell within
  534. a spreadsheet for an unwanted label prefix, the following Symphony
  535. macro comes in handy:
  536.  
  537. {down}{recalc C8}
  538. {if +C8 = "L"}~{beep}{quit}
  539. {branch \X}
  540.  
  541. The macro is named \X and the cell C8 contains the formula:
  542. @CELLPOINTER("TYPE").
  543.  
  544. -----------------------------------------------------------------
  545.                     PC Magazine Index on Disk
  546.         (PC Magazine Vol 4 No 23 Nov 12, 1985 Power User)
  547.  
  548.      The indexes to PC Magazine, available from the Interactive Reader
  549. Service (IRS), contain a wealth of data.  The value of this data can
  550. be enhanced with the command PCMAGNDX.PRG, which loads the index files
  551. into a dBASE data file.  Once in dBASE's .DBF format, the indexes
  552. become powerful tools for tapping the treasures of PC Magazine.  Any
  553. article can be located in seconds by author, subject or title, and
  554. groups of articles by the same author or covering the same topic can
  555. be located quickly.
  556.      For readers who are not familiar with the index text files, they
  557. are set up as paired A and B files for each section of an index.  The
  558. A file contains an article's title, description, volume, issue number
  559. and page number.  The corresponding B file contains the author's name
  560. and the category of the article, such as graphics, networks, etc.
  561.      On the IRS, the files are identified by the format  VOL#A?.TXT
  562. and  VOL#B?.TXT  where "#" indicates the volume of the index (Volume
  563. 3 or 4), and "?" is a code indicating the range of issues included
  564. within the file (1 for issues 1-5, 2 for 6-12, etc.).  Thus, the file
  565. pair VOL4A1.TXT and VOL4B1.TXT form a complete nidex for PC Magazine's
  566. Volume 4 Numbers 1 through 5.
  567.      Before using PCMAGNDX.PRG, you must download paired copies of the
  568. index files from the IRS.  Then, using any ASCII text editor, delete
  569. from both files the first five lines, which contain page and column
  570. headings.  Otherwise, these headings will end up as records in the
  571. resulting dBASE file.
  572.      Next, use dBASE to CREATE the three .DBF files TEMPA, TEMPB and
  573. PCMAGNDX.  Use the exact field lengths as show, as they are critical.
  574.      Finally, run PCMAGNDX.PRG by typing DO PCMAGNDX.  The result will
  575. be the file PCMAGNDX.DBF containing the combined information from the
  576. original A and B text files.  The program will automatically append
  577. new index file pairs to the database you've already created as new
  578. indexes become available on the IRS.  The files TEMPA.DBF and TEMPB.DBF
  579. will be emptied of records but will remain on the disk so they need not
  580. be recreated each time PCMAGNDX.PRG is run.
  581.  
  582. * PCMAGNDX.PRG - converts PC Magazine's Index Files to dBASE files
  583.  
  584. SET HEADING OFF
  585. SET SAFETY OFF
  586. CLEAR
  587. SET TALK OFF
  588. ACCEPT "Enter Volume Number (the First # in VOL#A#.TXT) " TO V
  589. ACCEPT "Enter Issue Code (the Second # in VOL#A#.TXT) " TO N
  590. CLEAR
  591. @ 12,25 SAY "Processing - Please wait"
  592. SELECT A
  593. USE pcmagndx
  594. SELECT B
  595. USE tempA
  596. APPEND FROM VOL&V.A&N..TXT SDF
  597. GO TOP
  598. @ 13,25 SAY "CREATING RECORD: "
  599. DO WHILE .NOT. EOF()
  600.   STORE SUBSTR(title,2,32) TO Mtitle
  601.   STORE SUBSTR(subject,2,35) TO Msubject
  602.   STORE vol TO Mvol
  603.   STORE no TO Mno
  604.   STORE page TO Mpage
  605.   SKIP
  606.     DO WHILE.NOT.EOF().AND.vol="  "
  607.       STORE TRIM(Mtitle)+title TO Mtitle
  608.       STORE TRIM(Msubject)+subject TO Msubject
  609.       SKIP
  610.     ENDDO
  611.   SELECT A
  612.   @ 13,52 SAY STR(RECNO(),4,0)
  613.   APPEND BLANK
  614.   REPLACE title WITH TRIM(Mtitle),subject WITH TRIM(Msubject),;
  615.       vol WITH Mvol,no WITH Mno,page WITH Mpage
  616.   SELECT B
  617. ENDDO
  618. @ 13,25 SAY "Adding Authors and Categories"
  619. SELECT C
  620. USE tempB
  621. APPEND FROM VOL&V.B&N..TXT SDF
  622. DELETE ALL FOR category=" " .AND. author=" "
  623. PACK
  624. SELECT A
  625. GO TOP
  626. SET RELATION TO RECNO() INTO C
  627. REPLACE ALL author WITH C->author,category WITH C->category
  628. SET RELATION
  629. @ 13,25 SAY "       HOUSEKEEPING        "
  630. SELECT B
  631. ZAP
  632. SELECT C
  633. ZAP
  634. CLEAR
  635. CLEAR ALL
  636. QUIT
  637. - - - - - - - - - -
  638. TEMPA.DBF Structure:              | PCMAGNDX.DBF Structure:
  639. 001   TITLE     C    033          | 001   TITLE     C   050
  640. 002   SUBJECT   C    036          | 002   SUBJECT   C   080
  641. 003   VOL       C    002          | 003   CATEGORY  C   020
  642. 004   NO        C    003          | 004   AUTHOR    C   033
  643. 005   PAGE      C    004          | 005   VOL       C   002
  644.                                   | 006   NO        C   003
  645. TEMPB.DBF Structure:              | 007   PAGE      C   004
  646. 001   CATEGORY  C    021
  647. 002   AUTHOR    C    033
  648.  
  649. -----------------------------------------------------------------
  650.                  Converting dBASE's Date Fields
  651.         (PC Magazine Vol 4 No 18 Sept 3, 1985 Power User)
  652.  
  653.      The Date field may cause confusion to new dBASE III users.  This
  654. new data type has several unique features that demand knowledge and
  655. effort to be useful.  Here are a few shortcuts that are not explained
  656. in the manual but do work.
  657.           1. When converting Character data types to Date types,
  658. normally it is necessary to use the special CTOD function.  However,
  659. if a file already has an entire field of data in MM/DD/YY format, and
  660. you wish to change this to a Date type in order to obtain the special
  661. properties of this data type, all you need to do is MODIFY the STRUCTURE
  662. of the field.  There is no need to create another field and use the
  663. CTOD function to replace the original field.  This can be useful for
  664. converting either dBASE II files or imported files.
  665.           2. Be extremely careful when using this data type in logical
  666. operands.  If there is no date present in the field, and you are using
  667. an operand of any kind on this field, the record will not be selected.
  668. This is because the absence of a date yields a null variable rather
  669. than a 0 date.  A null variable is neither greater than, less than, nor
  670. equal to any value.
  671.           3. The month feature will work as a selection criterion with
  672. a date field for any given file.  This can be particularly useful for
  673. searching anniversary dates.
  674.      Editor's Note:  A word of caution -- when converting Character
  675. type dates to dBASE III's Date type, the data must be in MM/DD/YY or
  676. MM-DD-YY format.  Dates in any other notation, such as YY/MM/DD, do
  677. not convert accurately using MODIFY STRUCTURE alone.  Also, this
  678. conversion is a one-way street.  Date type fields become strings of
  679. unexpected, and wierd, numbers when you try to change them into
  680. Character fields through MODIFY STRUCTURE.
  681.  
  682. -----------------------------------------------------------------
  683.                       Same Time Next Month
  684.              (PC World November 1985 Star-Dot-Star)
  685.  
  686.      dBASE III performs many more date calculations than dBASE II, but
  687. it's not capable of moving forward or backward in full months while
  688. maintaining the same day of the month, for instance, from January 5 to
  689. February 5.  The routines MTHFWRD.PRG and MTHBACK.PRG do this.
  690.      Keep these programs in a procedure file and call them when needed.
  691. The programs make adjustments for months that have different numbers of
  692. days.  For example, when moving forward a month from January 30, the
  693. program calculates February 28.  Similarly, when going backward, March
  694. 30 becomes February 28.
  695.  
  696. *MTHFWRD.PRG: Calculates forward from the starting date. Variables are:
  697. * MDATE_FWD is supplied by the calling program set to the starting date
  698. *           and will be returned as the future date
  699. * MCOUNT is supplied by the calling program as a counter for the
  700. *        number of months to go forward in time
  701. * MTH, YR are used internally, then released
  702.  
  703. YR = year(MDATE_FWD)
  704. MTH = month(MDATE_FWD) + MCOUNT
  705. do while MTH > 12
  706.    MTH = MTH - 12
  707.    YR = YR + 1
  708. enddo
  709. MDATE_FWD=ctod(str(MTH,2)+'/'+str(day(MDATE_FWD),2)+'/'+str(YR,4))
  710. if month(MDATE_FWD) > MTH
  711.    MDATE_FWD = MDATE_FWD - day(MDATE-FWD)
  712. endif
  713. release MTH,YR
  714.  
  715. - - - - -
  716. *MTHBACK.PRG: Calculates backward from the starting date. Variables are
  717. * MDATE_FWD is supplied by the calling program set to the starting date
  718. *           and will be returned as the prior date
  719. * MCOUNT is supplied by the calling program as a counter for the
  720. *        number of months to go backward in time
  721. * MTH, YR are used internally, then released
  722.  
  723. YR = year(MDATE_FWD)
  724. MTH = month(MDATE_FWD) - MCOUNT
  725. do while MTH < 1
  726.    MTH = MTH + 12
  727.    YR = YR - 1
  728. enddo
  729. MDATE_FWD=ctod(str(MTH,2)+'/'+str(day(MDATE_FWD),2)+'/'+str(YR,4))
  730.    MDATE_FWD = MDATE_FWD - day(MDATE_FWD)
  731. endif
  732. release MTH, YR
  733.  
  734. -----------------------------------------------------------------
  735.                  Screen Utilities for dBASE III
  736.         (PC Magazine Vol 4 No 18 Sept 3, 1985 Power User)
  737.  
  738.      When developing applications using dBASE III, it is often
  739. desirable to center or right-justify output to the screen or printer.
  740. CENTER.PRG and RIGHT.PRG allow for this type of justification without
  741. having to count characters or spaces.
  742.      Line by line, the program works as follows:  Line 1 establishes
  743. the parameters that need to be passed when the program is called.
  744. Line 2 establishes the width of the output device.  The value shown,
  745. 80, is generally used for screen output.  This can be changed to 133
  746. if output is to a wide-carriage printer.  Lines 3 and 4 are used to
  747. preserve the cursor's position at the time the program is called.
  748. Line 5 computes the starting column of the text in STRING and sends
  749. it to the output device.  Finally, line 6 resets the cursor to its
  750. position at the time of the program call.
  751.      Editor's Note:  These two short routines can be useful for
  752. displaying program titles, help messages, and other text on screen or
  753. in your custom reports.  If you prefer, you can eliminate lines 3, 4
  754. and 6, which will cause the screen cursor to reappear on the line below
  755. your message text.  CENTERII.PRG and RIGHTII.PRG shows how dBASE II
  756. users can achieve the same effect.  While the routine lacks dBASE III's
  757. elegance (because there isn't a PARAMETERS command in II), the crucial
  758. line performing the necessary row+column calculations works exactly the
  759. same in both versions of dBASE and runs just as quickly.  Macros are
  760. used to demonstrate how the program works.  You can achieve the same
  761. results using your row/column parameters directly.  This permits you
  762. to write only one line into your command file for each screen message.
  763. Using macros, however, does allow you to copy the routines into any of
  764. your files.  You change the results by changing the numbers and text
  765. string stored at the top of the routines.
  766.  
  767. * CENTER.PRG -- Centers text messages on screen/dBASE III
  768. PARAMETERS ROW,STRING
  769. WIDTH=80
  770. R=ROW()
  771. C=COL()
  772. @ ROW,0+(WIDTH-(LEN(STRING)))/2 SAY STRING
  773. @ R,C SAY ' '
  774.  
  775. * RIGHT.PRG -- Right-justifies messages on screen/dBASE III
  776. PARAMETERS ROW,STRING
  777. WIDTH=80
  778. R=ROW()
  779. C=COL()
  780. @ ROW,0+(WIDTH-(LEN(STRING))) SAY STRING
  781. @ R,C SAY ' '
  782.  
  783. * CENTERII.PRG -- Centers text strings on screen/dBASE II
  784. STROE "YOUR CENTERED TEXT" TO STRING
  785. STORE 5 TO ROW
  786. STORE 80 TO WIDTH
  787. @ ROW,0+(WIDTH-(LEN(STRING)))/2 SAY STRING
  788. RETURN
  789.  
  790. * RIGHTII.PRG -- Right-justifies text on screen/dBASE II
  791. STORE "YOUR FLUSH-RIGHT TEXT" TO STRING
  792. STORE 5 TO ROW
  793. STORE 80 TO WIDTH
  794. @ ROW,0+(WIDTH-(LEN(STRING))) SAY STRING
  795. RETURN
  796.  
  797. -----------------------------------------------------------------
  798.                dBASE-WordStar/MailMerge Connection
  799.         (PC Magazine Vol 4 No 18 Sept 3, 1985 Power User)
  800.  
  801.      Users of both dBASE and WordStar/MailMerge might find it useful
  802. to use the two together to produce personalized form letters.
  803. However, certain peculiarities in each program require that special
  804. programming be used so that MailMerge sees what it needs to perform
  805. properly with all kinds of data types.  Problems that often occur
  806. when attempting to use dBASE's facilities directly -- without
  807. programming -- include unwanted trailing blanks and, word, embedded
  808. commas in the data file that confuse MailMerge to the point where it
  809. won't track the data correctly.
  810.      Both of these problems are corrected by the dBASE program below.
  811. Basically, the program delineates field data with both quotation marks
  812. and commas, an overkill method that is acceptable to MailMerge.  It
  813. also strips trailing blanks using the TRIM function.  As an added
  814. bonus, the program can be used with any data file simply by changing
  815. the names of the fields used within the DO WHILE loop.
  816.      Editor's Note:  The program can be used by both dBASE II and III.
  817. EOF must be changed to EOF() for used with dBASE III.  For the sake
  818. of clarity, an additional space is used between commas, single-quotes
  819. and double-quotes in the listing.  For proper results do not include
  820. these spaces when typing the program into your system.
  821.  
  822. Structure of SAMPLE.DBF
  823. FLD    NAME        TYPE  WIDTH
  824. 001    MR_MRS       C     004
  825. 002    FIRSTNAME    C     015
  826. 003    LASTNAME     C     015
  827. 004    COMPANY      C     015
  828. 005    STREET       C     020
  829. 006    CITY         C     020
  830. 007    STATE        C     004
  831. 008    ZIP          C     005
  832.  
  833. * MAILFILE.PRG - Converts data files for use with MailMerge
  834. USE sample.dbf
  835. SET TALK OFF
  836. SET RAW ON
  837. SET ALTERNATE TO datatext.txt
  838. SET ALTERNATE ON
  839. DO WHILE .NOT. EOF
  840.    ? ' " ' , TRIM(mr_mrs)    , ' " ' , ' , '
  841.    ? ' " ' , TRIM(firstname) , ' " ' , ' , '
  842.    ? ' " ' , TRIM(lastname)  , ' " ' , ' , '
  843.    ? ' " ' , TRIM(company)   , ' " ' , ' , '
  844.    ? ' " ' , TRIM(address)   , ' " ' , ' , '
  845.    ? ' " ' , TRIM(city)      , ' " ' , ' , '
  846.    ? ' " ' , TRIM(state)     , ' " ' , ' , '
  847.    ? ' " ' , TRIM(zip)       , ' " ' , ' , '
  848.    SKIP
  849. ENDDO
  850. SET ALTERNATE OFF
  851. RETURN
  852.  
  853. -----------------------------------------------------------------
  854.                               DB3-RAC.TIP
  855.  
  856.      An undocumented feature of dBASE III is the ability to simulate
  857. Symphony's DOS.APP feature using dBASE III.  DOS.APP enables you to
  858. exit from Symphony to DOS temporarily, perform function(s) you need and
  859. return to Symphony with your work intact, i.e., there is no need to
  860. exit Symphony, do other work, and then reload Symphony and your
  861. worksheet again.
  862.      dBASE III has a RUN command, which seems to allow you to exit to
  863. DOS and run one EXE or COM file; that's what the documentation says.
  864. As it turns out, that is not quite true.  I gave dBASE III the command
  865. RUN COMMAND.COM.  It put me into DOS so I could run whatever I wanted.
  866. Once I was finished, I entered the command EXIT, and I was then back in
  867. dBASE III.
  868.      I have found nothing so far that I can't do while in DOS.  I did
  869. find, however, that to make the above RUN command work, I needed to
  870. have a floppy in drive A with COMMAND.COM on it even though I was using
  871. a hard disk system.
  872.  
  873. Ron Cleaver
  874. 6958 Hanover Parkway #301
  875. Greenbelt, MD 20770
  876.